Fast Gate A20
port 92h の bit 1 を立てるとA20 が有効になる。
port 92h の bit 1 が立っているなら無視してよい。
下手に書き込むとよくない?
port 92h の bit 0 がリセットなのでうっかり1 を書き込むとリセットされるらしい。
リセット防止のため、マスクする。
この後、A20 が有効になったかどうか判定する。
code:enable_a20_by_fast_gate.asm
sys_ctl_port_a_io equ 92h ; System Control Port A
sys_ctl_port_a_fast_gate_a20_mask equ 02h
sys_ctl_port_a_fast_reset_mask equ 01h
enable_a20_by_fast_gate:
in al, sys_ctl_port_a_io
test al, sys_ctl_port_a_fast_gate_a20_mask
jnz enable_a20_by_fast_gate_done
or al, sys_ctl_port_a_fast_gate_a20_mask
and al, 0ffh - sys_ctl_port_a_fast_reset_mask
out sys_ctl_port_a_io, al
enable_a20_by_fast_gate_done;